package leetcode;


/***
 * 题目：删除有序数组中的重复项
 * 链接：https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/
 */

public class RemoveDuplicates {
    public static void main(String[] args) {
        int i = removeDuplicates(new int[]{1, 4, 8, 8, 13});
        System.out.println(i);
    }

    /**
     * 双指针
     * curr用来写，next用来读
     * 正常情况curr+1=next，所以写不会影响原始顺序
     * 当出现了重复情况，next会跳下一个。等下一次不相等时，curr会覆盖掉下一个重复的
     * 但是next一直在往下读，所以即使curr再写，也是覆盖掉重复的，没有影响
     * 当next读取完毕，跳出循环，返回
     * 进阶：可以求出有多少个有效字段，直接再不相等情况下做一个++,但是计数需要累加2，前后各一个不会被计数
     * @param nums
     * @return
     */
     // 1 4 8 8 13
    public static int removeDuplicates(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }
        int valid = 2;
        int curr = 0;
        int next = 1;
        while (next < nums.length) {
            if(nums[curr] != nums[next]) {
                nums[curr + 1] = nums[next];
                next++;
                valid++;
            }
            next++;
        }
        System.out.println(valid);
        return nums.length;
    }
}
